1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<algorithm> #include<iostream> #include<stdio.h> #include<cstring> #include<numeric> #include<vector> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> using namespace std; #define sf(x) scanf("%d",&x) #define sff(x,y) scanf("%d%d",&x,&y) #define sfff(x,y,z) scanf("%d%d%d",&x,&y,&z) #pragma comment(linker, "/STACK:10240000000,10240000000") #define mem(x,y) memset(x,y,sizeof(x)) #define mec(x,y) memcpy(x,y,sizeof(x)) #define debug puts("------------") #define mp(x,y) make_pair(x,y) #define inf 0x3f3f3f3f #define ll long long #define eps 1e-5 #define mian main #define ture true #define nit int #define NV 150 #define NE 3000 int b[1010],d[1010],pb[1010]; int son[1010][1010]; int fa[1010]; int main() { int n; while(~sf(n)) { for(int i=1;i<=n;i++) sf(b[i]); for(int i=1;i<=n;i++) pb[b[i]]=i; for(int i=1;i<=n;i++) sf(d[i]); for(int i=1;i<=n;i++) fa[i]=i,son[i][0]=0; for(int i=2;i<=n;i++) { if(pb[d[i-1]]<pb[d[i]]-1) { fa[d[i]]=d[i-1]; son[d[i-1]][++son[d[i-1]][0]]=d[i]; } } for(int i=2;i<=n;i++) { if(fa[b[i]]==b[i]) { int x=fa[b[i-1]]; fa[b[i]]=x; son[x][++son[x][0]]=b[i]; } } for(int i=1;i<=n;i++) { printf("%d:",i); for(int j=1;j<=son[i][0];j++) printf(" %d",son[i][j]); puts(""); } } }
8 4 3 5 1 2 8 7 6 4 3 1 7 2 6 5 8 */
|